// 这是一个 数据库的表定义文件，并不具有实际的代码效用，只是作为声明之用
// TODO 需要进行更新，并且标明更新日期
class Xin {
    date: Date; // 发布日期
    title: string; // 心语签的标题
    description: string; // 心语签的描述
    please: string; // 心语签的祝福语
    image: string; // 图片的下载地址
    tags: string[]; // 心语签的标签
    belongTo: string; // 心语签归属的章节
    isVisible: boolean; // 心语签可不可视，公开的时候没到日期不能公开
    type: string; // 只能为 picture 或者 card，picture 会整个作为图片展示，card 会新型展示
    createTime: Date; // 被创建的时间点
    // _openid: string; // 创建者
}

class PublicXin extends Xin {
    // 权限管理函数表示权限管理的对象是什么样子的
    // 默认变量：database 表示整个数据库 database.user 为 user 表
    // doc 表示当前选中的数据表的一项
    // auth.openid 为微信登录时，用户的 openid
    ACL() {
        return {
            read: "*",
            write: false,
        };
    }
}
class UnPublicXin extends Xin {
    ACL() {
        return {
            read: "doc._openid == auth.openid",
            write: "doc._openid == auth.openid",
            create: false,
            update: "doc._openid == auth.openid",
            delete: "doc._openid == auth.openid",
        };
    }
}

class User {
    openid: string;
    nickName: string;
    avatarUrl: string;
    isManager: boolean;
    ACL() {
        return {
            read: "get(`database.User.${auth.openid}`).isManager",
            write: false,
        };
    }
}

class ErrorLog {
    ErrorTime: Date;
    title: string;
    content: string;
    type: string; // 错误发生的类型
    ACL() {
        return {
            read: "doc._openid == auth.openid",
            write: "doc._openid == auth.openid",
            update: "doc._openid == auth.openid",
            delete: false,
        };
    }
}
